/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.dsw2.biblioteca8a.bl;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.dsw2.biblioteca8a.DAO.DetalleprestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.DAO.PrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoDetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoServicio;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.estadoPrestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Detalleprestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Libro;
import mx.itschapala.dsw2.biblioteca8a.modelo.Prestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Usuario;

/**
 *
 * @author z
 */
@Stateless
public class PrestamoBL implements PrestamoBLLocal {
    @EJB
    private DetalleprestamoDaoLocal DetallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
        List<Prestamo>prestamos = prestamoDao.findincompleteByUser(user);
        int available =3;
        for(Prestamo p: prestamos ) {
            available = available - DetallePrestamoDao.findLends(p).size();
                 
        }
        if(available <=0 || user.getId()== null || books.isEmpty() || books.size()>available){ 
            return EstadoServicio.INCOMPLETE;
        } 
        else{ 
            Prestamo p= new Prestamo();
            p.setIdusuario(user);
            p.setFecha(new Date());
            p.setHora(new Date());
            p.setEstado(estadoPrestamo.OPEN.ordinal());
              prestamoDao.create(p);
            
            for(Libro l :books){
                Detalleprestamo dp = new Detalleprestamo();
                 dp.setIdprestamo(p);
                 dp.setIdlibro(l);
                 dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
                DetallePrestamoDao.create(dp);
            } 
        return EstadoServicio.COMPLETE;
        }
    
    }

    

}
